<?php
class Admin_CotizadorController extends Model3_Controller
{
    private $_credentials;
    protected $_config;
    
    public function init()
    {
        if(!Model3_Auth::isAuth())
            $this->redirect();
        else
        {
            $role = Model3_Auth::getCredentials('type');
            if( $role !== DefaultDb_Entity_User::TYPE_ADMIN )
            {
               Model3_Auth::deleteCredentials();
               $this->redirect();
            }
        }
        $this->_credentials = Model3_Auth::getCredentials();
        $this->view->setTemplate('Cotizador');
    }
    
    public function indexAction()
    {

    }
    
    public function getListaAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
        
        $auth = new Model3_Auth();
        $idUser = $auth->getCredentials('id');
        
        $em = $this->getEntityManager('DefaultDb');        
        $lista = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findBy(array('id_usuario' => $idUser), array('fecha' => 'DESC'));
        
        $arrJson = array();
        foreach($lista as $item)
        {
            $temp = array(
                "idCotizacion" => $item->getIdCotizacion(),
                "titulo" => $item->getTitulo(),
                "cliente" => $item->getCliente(),
                "fecha" => $item->getFecha(),
                "precioFinal" => $item->getPrecioFinal()
            );
            array_push($arrJson, $temp);
        }
        
        $this->view->result = json_encode($arrJson);
    }
    
    public function cotizacionAction(){
        $idCotizacion = $this->getRequest()->getParam('cotizacion');
        if ($idCotizacion != "" && $idCotizacion > 0)
        {
            $em = $this->getEntityManager('DefaultDb');        
            $cotizacion = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $idCotizacion));
            $this->view->cotizacionId = $cotizacion->getIdCotizacion();
            $this->view->cliente = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getCliente() );
            $this->view->titulo = $cotizacion->getTitulo();
            $this->view->cblogotipo = $cotizacion->getLogotipo();
            $this->view->fecha = date("d/m/Y", strtotime($cotizacion->getFecha()));
            $this->view->fechaexpiracion = date("Y/m/d", strtotime($cotizacion->getFechaExpiracion()));
            $comentario1 = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getComentario1() );
            $this->view->comentario1 = $comentario1;
            $comentario2 = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getComentario2() );
            $this->view->comentario2 = $comentario2;
            $comentario3 = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getComentario3() );
            $this->view->comentario3 = $comentario3;
            $descunidad = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getDescripcion() );
            $this->view->descunidad = $descunidad;
            $correos = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getCorreos() );
            $this->view->correos = $correos;
            $firma = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getFirma() );
            $this->view->firma = $firma;
        }else{
            $this->view->fecha = date("d/m/Y", strtotime("now"));
            $this->view->fechaexpiracion = date("Y/m/d", strtotime("now"));
            $this->view->cotizacionId = 0;
            $em = $this->getEntityManager('DefaultDb');        
            $cotizacion = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array(), array('id_cotizacion_flete' => 'DESC'), 1, 1);
            $comentario1 = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getComentario1() );
            $this->view->comentario1 = $comentario1;
            $comentario2 = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getComentario2() );
            $this->view->comentario2 = $comentario2;
            $comentario3 = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getComentario3() );
            $this->view->comentario3 = $comentario3;
            $descunidad = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getDescripcion() );
            $this->view->descunidad = $descunidad;
            $correos = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $cotizacion->getCorreos() );
        }
    }
    public function saveCotizacionAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
        if ($this->getRequest()->isPost())
        {
            $post = $this->getRequest()->getPost();
            if (isset($post['form'])){
                $em = $this->getEntityManager('DefaultDb');
                $form = json_decode($post['form']);
                //print_r($form); return;
                $auth = new Model3_Auth();
                $idUser = $auth->getCredentials('id');
                
                $cotizacion = ($form->cotizacionId) ? $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $form->cotizacionId)) : new DefaultDb_Entity_CotizacionFlete();
                $em->getConnection()->beginTransaction();
                try{
                    if ($form->cotizacionId == 0){
                        $form->fexpira = str_replace("/", "-", $form->fexpira);
                        $cotizacion->setIdUsuario($idUser);
                        $cotizacion->setFecha(date('Y-m-d H:m:s'));
                        $cotizacion->setFechaExpiracion(date("Y-m-d", strtotime($form->fexpira)));
                        $cotizacion->setPrecioFinal(0);
                    }
                    $cotizacion->setTitulo($form->titulo);
                        $cotizacion->setCliente($form->cliente);
                    $cotizacion->setComentario1($form->comentario1);
                    $cotizacion->setComentario2($form->comentario2);
                    $cotizacion->setComentario3($form->comentario3);
                    $cotizacion->setDescripcion($form->descunidad);
                    $cotizacion->setCorreos($form->correos);
                    $cotizacion->setLogotipo($form->cblogotipo);
                    $cotizacion->setFirma($form->firma);
                    $em->persist($cotizacion);
                    $em->flush();
                    $em->getConnection()->commit();
                    $result = ($form->cotizacionId == 0) ? array("Mensaje" => "Transacción Satisfactoria", "Id" => $cotizacion->getIdCotizacion()) : array("Mensaje" => "Transacción Satisfactoria");
                } catch(Exception $e){
                    $em->getConnection()->rollback();
                    $em->close();
                    $result = array("Error" => $e->getMessage());
		}                
            }
        }
        $this->view->result = json_encode($result);
    }
    
    public function deleteCotizacionAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
        if ($this->getRequest()->isPost())
        {
            $post = $this->getRequest()->getPost();
            if (isset($post['idCotizacion'])){
                $em = $this->getEntityManager('DefaultDb');
                $cotizacionDET = $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findBy(array('id_cotizacion_flete' => $post['idCotizacion']));
                $cotizacion = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $post['idCotizacion']));
                $em->getConnection()->beginTransaction();
                try{
                    foreach($cotizacionDET as $detalle){
                        $em->remove($detalle);
                    }
                    $em->remove($cotizacion);
                    $em->flush();
                    $em->getConnection()->commit();
                    $result = array("Mensaje" => "Transacción Satisfactoria");
                } catch(Exception $e){
                    $em->getConnection()->rollback();
                    $em->close();
                    $result = array("Error" => $e->getMessage());
		}                
            }
        }
        $this->view->result = json_encode($result);
    }
    
    public function getRutasListAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
       
        $cities = $this->getEntityManager('DefaultDb')->getRepository('DefaultDb_Entity_City')->findAll();
        $arrJson = array();
        foreach($cities as $city)
        {
            //$state = $this->getEntityManager('DefaultDb')->getRepository('DefaultDb_Entity_State')->findOneBy(array('id_states' => $city->getStates()));          
            $nombre = $city->getName();
            $arrJson[] = array('idRuta' => $city->getId(), 'nombre' => $nombre);
        }
        $this->view->result = json_encode($arrJson);
    }
    
    public function getRutasEstadoListAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
       
        $states = $this->getEntityManager('DefaultDb')->getRepository('DefaultDb_Entity_State')->findAll();
        $arrJson = array();
        foreach($states as $state)
        {
            //$state = $this->getEntityManager('DefaultDb')->getRepository('DefaultDb_Entity_State')->findOneBy(array('id_states' => $city->getStates()));          
            $nombre = $state->getName(); // . ' - ' . $city->getName();
            $arrJson[] = array('idRuta' => $state->getId(), 'nombre' => $nombre);
        }
        $this->view->result = json_encode($arrJson);
    }
    
    public function getListaDetalleAction(){
        $this->view->setUseTemplate(FALSE);
        //header("Content-Type: application/json");
        $arrJson = array();
        if ($this->getRequest()->isPost())
        {
            $post = $this->getRequest()->getPost();
            if (isset($post['idCotizacion'])){
                $em = $this->getEntityManager('DefaultDb');        
                $lista = $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findBy(array('id_cotizacion_flete' => $post['idCotizacion']));
                foreach($lista as $item)
                {
                    $origen = $em->getRepository('DefaultDb_Entity_State')->findOneBy(array('id_states' => $item->getIdOrigen()))->getName();
                    $destino = $em->getRepository('DefaultDb_Entity_State')->findOneBy(array('id_states' => $item->getIdDestino()))->getName();
                    $tipoCalculo = ($item->getTipoPrecio() == "KM") ? "Precio por KM" : "Precio por Insumo";
                    $arrJson[] = array(
                        "idCotizacionDetalle" => $item->getIdCotizacionFleteDetalle(),
                        "idCotizacion" => $item->getIdCotizacionFlete(),
                        "idOrigen" => $item->getIdOrigen(),
                        "origen" => $origen,
                        "idDestino" => $item->getIdDestino(),
                        "destino" => $destino,
                        "tipoCalculo" => $item->getTipoPrecio(),
                        "tipoCalculoDesc" => $tipoCalculo,
                        "precioxKM" => $item->getPrecioxKm(),
                        "totaRecorrido" => $item->getTotalRecorrido(),
                        "casetas" => $item->getCasetas(),
                        "salario" => $item->getSalario(),
                        "otrosGastos1" => $item->getOtrosGastos1(),
                        "otrosGastos2" => $item->getOtrosGastos2(),
                        "maniobras" => $item->getManiobras(),
                        "cantidadEstadia" => $item->getCantidadEstadia(),
                        "precioEstadia" => $item->getPrecioEstadia(),
                        "estadia" => $item->getEstadias(),
                        "precioSinIva" => $item->getPrecioSinIva(),
                        "porcRetension" => $item->getPorcRetension(),
                        "retension" => $item->getRetension(),
                        "porcIva" => $item->getPorcIva(),
                        "iva" => $item->getIva(),
                        "precioFinal" => $item->getPrecioFinal(),
                        "precioCombustible" => $item->getPrecioCombustible(),
                        "opcionCombustible" => $item->getOpcionCombustible(),
                        "rendKmLt" => $item->getRendKmLt(),
                        "gastoCombustible" => $item->getGastoCombustible(),
                        "totalInsumo" => $item->getTotalInsumo(),
                        "utilidadKm" => $item->getUtilidadKM(),
                        "utilidadViaje" => $item->getUtilidadViaje(),
                        "utilidadPorc" => $item->getUtilidadPorc(),
                        "utilidad" => $item->getUtilidad()
                    );
                }
            }
        }
        $this->view->result = json_encode($arrJson);
    }
    
    public function saveDetalleCotizacionAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
        if ($this->getRequest()->isPost())
        {
            $post = $this->getRequest()->getPost();
            if (isset($post['form'])){
                $em = $this->getEntityManager('DefaultDb');
                $idCotizacion = $post['idCotizacion'];
                $idCotizacionDetalle = $post['idCotizacionDetalle'];
                $tipoPrecio = $post['tipoPrecio'];
                $idOrigen = $post['origen'];
                $idDestino = $post['destino'];
                $form = json_decode($post['form']);
                
                $cotizacionDetalle = ($idCotizacionDetalle) ? $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findOneBy(array('id_cotizacion_flete_detalle' => $idCotizacionDetalle)) : new DefaultDb_Entity_CotizacionFleteDetalle();
                $em->getConnection()->beginTransaction();
                try{
                    if ($idCotizacionDetalle == 0){
                        $cotizacionDetalle->setIdCotizacionFlete($idCotizacion);
                    }
                    if ($tipoPrecio != "KM"){
                        $cotizacionDetalle->setOpcionCombustible($form->opcionCombustible);
                        $cotizacionDetalle->setPrecioCombustible($form->precioCombustible);
                        $cotizacionDetalle->setRendKmLt($form->rendkmlt);
                        $cotizacionDetalle->setGastoCombustible($form->gastocombustible);
                        $cotizacionDetalle->setTotalInsumo($form->totalinsumos);
                        $cotizacionDetalle->setUtilidadKM($form->utilidadKm);
                        $cotizacionDetalle->setUtilidadViaje($form->utilidadViaje);
                        $cotizacionDetalle->setUtilidadPorc($form->utilidadPorc);
                        $cotizacionDetalle->setUtilidad($form->utilidad);
                    }else{
                        $cotizacionDetalle->setPrecioxKm($form->pxkm);
                    }
                    
                    $cotizacionDetalle->setIdOrigen($idOrigen);
                    $cotizacionDetalle->setIdDestino($idDestino);
                    $cotizacionDetalle->setTipoPrecio($tipoPrecio);
                    $cotizacionDetalle->setTotalRecorrido($form->totrecorrido);
                    $cotizacionDetalle->setCasetas($form->casetas);
                    $cotizacionDetalle->setSalario($form->salario);
                    $cotizacionDetalle->setOtrosGastos1($form->ogastos1);
                    $cotizacionDetalle->setOtrosGastos2($form->ogastos2);
                    $cotizacionDetalle->setManiobras($form->maniobras);
                    $cotizacionDetalle->setCantidadEstadia($form->nestadias);
                    $cotizacionDetalle->setPrecioEstadia($form->pestadia);
                    $cotizacionDetalle->setEstadias($form->estadias);
                    $cotizacionDetalle->setPrecioSinIva($form->psiniva);
                    $cotizacionDetalle->setPorcRetension($form->porcretencion);
                    $cotizacionDetalle->setRetension($form->retencion);
                    $cotizacionDetalle->setPorcIva($form->porciva);
                    $cotizacionDetalle->setIva($form->iva);
                    $cotizacionDetalle->setPrecioFinal($form->pfinal);
                    $em->persist($cotizacionDetalle);
                    $em->flush();
                    $cotizacionSUM = ($idCotizacion) ? $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findBy(array('id_cotizacion_flete' => $idCotizacion)) : new DefaultDb_Entity_CotizacionFleteDetalle();
                    $TotalRetension = 0;
                    foreach($cotizacionSUM as $sumador)
                    {
                        $TotalRetension += $sumador->getPrecioFinal();
                    }
                    $cotizacion = ($idCotizacion) ? $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $idCotizacion)) : new DefaultDb_Entity_CotizacionFlete();
                    $cotizacion->setPrecioFinal($TotalRetension);
                    $em->persist($cotizacion);
                    $em->flush();
                    $em->getConnection()->commit();
                    $result = ($idCotizacionDetalle == 0) ? array("Mensaje" => "Transacción Satisfactoria", "Id" => $cotizacionDetalle->getIdCotizacionFleteDetalle()) : array("Mensaje" => "Transacción Satisfactoria");
                } catch(Exception $e){
                    $em->getConnection()->rollback();
                    $em->close();
                    $result = array("Error" => $e->getMessage());
		}                
            }
        }
        $this->view->result = json_encode($result);
    }
    
    public function deleteCotizacionDetalleAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
        if ($this->getRequest()->isPost())
        {
            $post = $this->getRequest()->getPost();
            if (isset($post['idCotizacionDetalle']) && isset($post['idCotizacion'])){
                $em = $this->getEntityManager('DefaultDb');
                $cotizacionDetalle = $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findOneBy(array('id_cotizacion_flete_detalle' => $post['idCotizacionDetalle']));
                $em->getConnection()->beginTransaction();
                try{
                    $em->remove($cotizacionDetalle);
                    $em->flush();
                    $cotizacionSUM = $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findBy(array('id_cotizacion_flete' => $post['idCotizacion']));
                    $TotalRetension = 0;
                    foreach($cotizacionSUM as $sumador)
                    {
                        $TotalRetension += $sumador->getPrecioFinal();
                    }
                    $cotizacion = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $post['idCotizacion']));
                    $cotizacion->setPrecioFinal($TotalRetension);
                    
                    $em->flush();
                    $em->getConnection()->commit();
                    $result = array("Mensaje" => "Transacción Satisfactoria");
                } catch(Exception $e){
                    $em->getConnection()->rollback();
                    $em->close();
                    $result = array("Error" => $e->getMessage());
		}                
            }
        }
        $this->view->result = json_encode($result);
    }
    
    private function getImagen($val){
        $imagen = '';
        if ($val == 1){
            $imagen = 'logo1.gif';
        }
        if ($val == 2){
            $imagen = 'logo2.gif';
        }
        if ($val == 3){
            $imagen = 'logo3.gif';
        }
        return $imagen;
    }
    
    private function getPDFAction($idCotizacion){
        include_once "../library/mPDF/mpdf.php";
        $this->view->setUseTemplate(FALSE);
        setlocale(LC_ALL,"es_ES");
        $meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
        $html = file_get_contents("../application/View/Scripts/Admin/Cotizador/getPDF.php");

        $dia = date("d");
        $mes = $meses[date("n") - 1];
        $anio = date("Y");
        $fecha = $dia . " de " . $mes . " del " . $anio;
        $html = str_replace("[FECHA]", $fecha, $html);

        $em = $this->getEntityManager('DefaultDb');
        /* TRABAJADOR */
        $auth = new Model3_Auth();
        //$objTrabajador = $em->getRepository('DefaultDb_Entity_User')->findOneBy(array('id' => $auth->getCredentials('id')));
        //$trabajador = $objTrabajador->getFirstName() . " " . $objTrabajador->getLastName();
        /* CLIENTE */
        $objCotizacion = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $idCotizacion));
        $V = new EnLetras();
        $precioLetras=strtoupper($V->ValorEnLetras($objCotizacion->getPrecioFinal(),"pesos"));
        $html = str_replace("[MONTOFINAL]", $precioLetras, $html);
        $imagenlogo = $this->getImagen($objCotizacion->getLogotipo());
        $html = str_replace("[LOGOMF]", $imagenlogo, $html);
        $trabajador = htmlentities($objCotizacion->getFirma());
        $html = str_replace("[TRABAJADOR]", $trabajador, $html);
        $cliente = $objCotizacion->getCliente();
        
        $html = str_replace("[CLIENTE]", str_replace( array( "\n", "\r" ), array( "<br/>", "<br/>" ), $cliente ), $html);
        /* COMENTARIOS */
        $comentario1 = htmlentities($objCotizacion->getComentario1());
        $html = str_replace("[COMENTARIO1]", $comentario1, $html);
        $comentario2 = $objCotizacion->getComentario2();
        $html = str_replace("[COMENTARIO2]", $comentario2, $html);
        $comentario3 = $objCotizacion->getComentario3();
        $html = str_replace("[COMENTARIO3]", $comentario3, $html);
        /* TABLA */
        $tabla = $this->getDetalleCotizacionPDF($idCotizacion);
        $html = str_replace("[TABLA]", $tabla, $html);
        /* DESCRIPCION */
        $descripcion = $objCotizacion->getDescripcion();
        $html = str_replace("[DESCRIPCION]", $descripcion, $html);
        /* VIGENCIA */
        $dia = date("d", strtotime($objCotizacion->getFechaExpiracion()));
        $mes = $meses[date("n", strtotime($objCotizacion->getFechaExpiracion())) - 1];
        $anio = date("Y", strtotime($objCotizacion->getFechaExpiracion()));
        $vigencia = $dia . " de " . $mes . " del " . $anio;
        $html = str_replace("[VIGENCIA]", $vigencia, $html);

        $mpdf=new mPDF('c','Letter');
        $mpdf->SetDisplayMode('fullpage');
        $mpdf->SetTitle("Cotizacion");
        $mpdf->SetAuthor("Mas Fletes");
        $mpdf->WriteHTML($html);	// Separate Paragraphs  defined by font
        $nombreArchivo = "Cotización MasFletes - ".date("Y-m-d").".pdf";
        $mpdf->Output($nombreArchivo,'I'); 
        exit;
    }
    
    public function generatePDFAction(){
        $idCotizacion = $this->getRequest()->getParam('idCotizacion');
        if ($idCotizacion > 0){
            $this->getPDFAction($idCotizacion);
        }
        exit;
    }
    
    private function sendPDFAction($idCotizacion){
        include_once "../library/mPDF/mpdf.php";
        $this->view->setUseTemplate(FALSE);
        setlocale(LC_ALL,"es_ES");
        
        $mpdf=new mPDF('c','Letter');
        
        $meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
        $html = file_get_contents("../application/View/Scripts/Admin/Cotizador/getPDF.php");

        $dia = date("d");
        $mes = $meses[date("n") - 1];
        $anio = date("Y");
        $fecha = $dia . " de " . $mes . " del " . $anio;
        $html = str_replace("[FECHA]", $fecha, $html);

        $em = $this->getEntityManager('DefaultDb');
        /* TRABAJADOR */
        $auth = new Model3_Auth();
        //$objTrabajador = $em->getRepository('DefaultDb_Entity_User')->findOneBy(array('id' => $auth->getCredentials('id')));
        //$trabajador = $objTrabajador->getFirstName() . " " . $objTrabajador->getLastName();
        /* CLIENTE */
        $objCotizacion = $em->getRepository('DefaultDb_Entity_CotizacionFlete')->findOneBy(array('id_cotizacion_flete' => $idCotizacion));
        
        $V = new EnLetras();
        $precioLetras=strtoupper($V->ValorEnLetras($objCotizacion->getPrecioFinal(),"pesos"));
        $html = str_replace("[MONTOFINAL]", $precioLetras, $html);
        $imagenlogo = $this->getImagen($objCotizacion->getLogotipo());
        $html = str_replace("[LOGOMF]", $imagenlogo, $html);
        $trabajador = htmlentities($objCotizacion->getFirma());
        $html = str_replace("[TRABAJADOR]", $trabajador, $html);
        $cliente = $objCotizacion->getCliente();
        $html = str_replace("[CLIENTE]", str_replace( array( "\n", "\r" ), array( "<br/>", "<br/>" ), $cliente ), $html);
        /* COMENTARIOS */
        $comentario1 = htmlentities($objCotizacion->getComentario1());
        $html = str_replace("[COMENTARIO1]", $comentario1, $html);
        $comentario2 = $objCotizacion->getComentario2();
        $html = str_replace("[COMENTARIO2]", $comentario2, $html);
        $comentario3 = $objCotizacion->getComentario3();
        $html = str_replace("[COMENTARIO3]", $comentario3, $html);
        /* TABLA */
        $tabla = $this->getDetalleCotizacionPDF($idCotizacion);
        $html = str_replace("[TABLA]", $tabla, $html);
        /* DESCRIPCION */
        $descripcion = $objCotizacion->getDescripcion();
        $html = str_replace("[DESCRIPCION]", $descripcion, $html);
        /* VIGENCIA */
        $dia = date("d", strtotime($objCotizacion->getFechaExpiracion()));
        $mes = $meses[date("n", strtotime($objCotizacion->getFechaExpiracion())) - 1];
        $anio = date("Y", strtotime($objCotizacion->getFechaExpiracion()));
        $vigencia = $dia . " de " . $mes . " del " . $anio;
        $html = str_replace("[VIGENCIA]", $vigencia, $html);

        $mpdf->SetDisplayMode('fullpage');
        $mpdf->SetTitle("Cotizacion");
        $mpdf->SetAuthor("Mas Fletes");
        $mpdf->WriteHTML(utf8_encode($html));	// Separate Paragraphs  defined by font
        $nombreArchivo = "Cotización MasFletes - ".date("Y-m-d").".pdf";
        $content = $mpdf->Output($nombreArchivo, 'S');
        $content = chunk_split(base64_encode($content));
        
        $mailto = $objCotizacion->getCorreos(); //Mailto here
        $from_name = 'MasFletes.com'; //Name of sender mail
        $from_mail = 'info@masfletes.com'; //Mailfrom here
        $subject = 'Cotizacion MasFletes.com - '.$objCotizacion->getTitulo();
        $message = '<p>Estimado(a) Cliente:</p><p>Mediante la presente se le adjunta la cotización solicitada</p>';
        $filename = "cotizacion-".date("d-m-Y_H-i",time()).".pdf"; //Your Filename whit local date and time

        $boundary = "XYZ-" . date("dmYis") . "-ZYX";

        $header = "--$boundary\r\n";
        $header .= "Content-Transfer-Encoding: 8bits\r\n";
        $header .= "Content-Type: text/html; charset=ISO-8859-1\r\n\r\n"; //plain
        $header .= "$message\r\n";
        $header .= "--$boundary\r\n";
        $header .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n";
        $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n";
        $header .= "Content-Transfer-Encoding: base64\r\n\r\n";
        $header .= "$content\r\n";
        $header .= "--$boundary--\r\n";

        $header2 = "MIME-Version: 1.0\r\n";
        $header2 .= "From: ".$from_name." \r\n";
        $header2 .= "Return-Path: $from_mail\r\n";
        $header2 .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";
        $header2 .= "$boundary\r\n";
        mail($mailto,$subject,$header,$header2, "-r".$from_mail);
    }
    
    public function saveSendCotizacionAction(){
        $this->view->setUseTemplate(FALSE);
        header("Content-Type: application/json");
        if ($this->getRequest()->isPost())
        {
            $post = $this->getRequest()->getPost();
            try{
                $this->sendPDFAction($post['idCotizacion']);
                $result = array("Mensaje" => "Transacción Satisfactoria");
            } catch(Exception $e){
                $result = array("Error" => "Surgio un error al enviar el correo");
            }
        }
        $this->view->result = json_encode($result);
    }
    
    private function getDetalleCotizacionPDF($idCotizacion){
        $result = "<table><thead><tr><th>Origen</th><th>Destino</th><th>IVA</th><th>Total</th></tr></thead><tbody>";
        $em = $this->getEntityManager('DefaultDb');
        $lista = $em->getRepository('DefaultDb_Entity_CotizacionFleteDetalle')->findBy(array('id_cotizacion_flete' => $idCotizacion));
        foreach($lista as $item)
        {
            $origen = $em->getRepository('DefaultDb_Entity_State')->findOneBy(array('id_states' => $item->getIdOrigen()))->getName();
            $destino = $em->getRepository('DefaultDb_Entity_State')->findOneBy(array('id_states' => $item->getIdDestino()))->getName();
            $result .= "<tr><td class='origen'>".$origen."</td><td class='destino'>".$destino."</td><td class='derecha'>$ ".$item->getIva()."</td><td class='derecha'>$ ".$item->getPrecioFinal()."</td></tr>";
        }
        $result .= "</tbody></table>";
        return $result;
    }
}
/**/
class EnLetras
{
  var $Void = "";
  var $SP = " ";
  var $Dot = ".";
  var $Zero = "0";
  var $Neg = "Menos";
  
    function ValorEnLetras($x, $Moneda ){
        $s="";
        $Ent="";
        $Frc="";
        $Signo="";

        if(floatVal($x) < 0)
         $Signo = $this->Neg . " ";
        else
         $Signo = "";

        if(intval(number_format($x,2,'.','') )!=$x) //<- averiguar si tiene decimales
          $s = number_format($x,2,'.','');
        else
          $s = number_format($x,2,'.','');

        $Pto = strpos($s, $this->Dot);

        if ($Pto === false)    {
          $Ent = $s;
          $Frc = $this->Void;
        }
        else    {
          $Ent = substr($s, 0, $Pto );
          $Frc =  substr($s, $Pto+1);
        }

        if($Ent == $this->Zero || $Ent == $this->Void)
           $s = "Cero ";
        elseif( strlen($Ent) > 7)    {
           $s = $this->SubValLetra(intval( substr($Ent, 0,  strlen($Ent) - 6))) . 
                 "Millones " . $this->SubValLetra(intval(substr($Ent,-6, 6)));
        }
        else    {
          $s = $this->SubValLetra(intval($Ent));
        }

        if (substr($s,-9, 9) == "Millones " || substr($s,-7, 7) == "Millón ")
           $s = $s . "de ";

        $s = $s . $Moneda;

        if($Frc != $this->Void)    {
           $s = $s . " " . $Frc. "/100";
           //$s = $s . " " . $Frc . "/100";
        }
        $letrass=$Signo . $s . " M.N.";
        return ($Signo . $s . " M.N.");
    }


    function SubValLetra($numero){
        $Ptr="";
        $n=0;
        $i=0;
        $x ="";
        $Rtn ="";
        $Tem ="";

        $x = trim("$numero");
        $n = strlen($x);

        $Tem = $this->Void;
        $i = $n;

        while( $i > 0){
           $Tem = $this->Parte(intval(substr($x, $n - $i, 1). 
                               str_repeat($this->Zero, $i - 1 )));
           If( $Tem != "Cero" )
              $Rtn .= $Tem . $this->SP;
           $i = $i - 1;
        }


        //--------------------- GoSub FiltroMil ------------------------------
        $Rtn=str_replace(" Mil Mil", " Un Mil", $Rtn );
        while(1){
           $Ptr = strpos($Rtn, "Mil ");       
           If(!($Ptr===false)){
              If(! (strpos($Rtn, "Mil ",$Ptr + 1) === false ))
                $this->ReplaceStringFrom($Rtn, "Mil ", "", $Ptr);
              Else
               break;
           }
           else break;
        }

        //--------------------- GoSub FiltroCiento ------------------------------
        $Ptr = -1;
        do{
           $Ptr = strpos($Rtn, "Cien ", $Ptr+1);
           if(!($Ptr===false)){
              $Tem = substr($Rtn, $Ptr + 5 ,1);
              if( $Tem == "M" || $Tem == $this->Void)
                 ;
              else          
                 $this->ReplaceStringFrom($Rtn, "Cien", "Ciento", $Ptr);
           }
        }while(!($Ptr === false));

        //--------------------- FiltroEspeciales ------------------------------
        $Rtn=str_replace("Diez Un", "Once", $Rtn );
        $Rtn=str_replace("Diez Dos", "Doce", $Rtn );
        $Rtn=str_replace("Diez Tres", "Trece", $Rtn );
        $Rtn=str_replace("Diez Cuatro", "Catorce", $Rtn );
        $Rtn=str_replace("Diez Cinco", "Quince", $Rtn );
        $Rtn=str_replace("Diez Seis", "Dieciseis", $Rtn );
        $Rtn=str_replace("Diez Siete", "Diecisiete", $Rtn );
        $Rtn=str_replace("Diez Ocho", "Dieciocho", $Rtn );
        $Rtn=str_replace("Diez Nueve", "Diecinueve", $Rtn );
        $Rtn=str_replace("Veinte Un", "Veintiun", $Rtn );
        $Rtn=str_replace("Veinte Dos", "Veintidos", $Rtn );
        $Rtn=str_replace("Veinte Tres", "Veintitres", $Rtn );
        $Rtn=str_replace("Veinte Cuatro", "Veinticuatro", $Rtn );
        $Rtn=str_replace("Veinte Cinco", "Veinticinco", $Rtn );
        $Rtn=str_replace("Veinte Seis", "Veintiseís", $Rtn );
        $Rtn=str_replace("Veinte Siete", "Veintisiete", $Rtn );
        $Rtn=str_replace("Veinte Ocho", "Veintiocho", $Rtn );
        $Rtn=str_replace("Veinte Nueve", "Veintinueve", $Rtn );

        //--------------------- FiltroUn ------------------------------
        If(substr($Rtn,0,1) == "M") $Rtn = "Un " . $Rtn;
        //--------------------- Adicionar Y ------------------------------
        for($i=65; $i<=88; $i++)
        {
          If($i != 77)
             $Rtn=str_replace("a " . Chr($i), "* y " . Chr($i), $Rtn);
        }
        $Rtn=str_replace("*", "a" , $Rtn);
        return($Rtn);
    }


    function ReplaceStringFrom(&$x, $OldWrd, $NewWrd, $Ptr){
      $x = substr($x, 0, $Ptr)  . $NewWrd . substr($x, strlen($OldWrd) + $Ptr);
    }

    function Parte($x){
        $Rtn='';
        $t='';
        $i='';
        Do
        {
          switch($x)
          {
             Case 0:  $t = "Cero";break;
             Case 1:  $t = "Un";break;
             Case 2:  $t = "Dos";break;
             Case 3:  $t = "Tres";break;
             Case 4:  $t = "Cuatro";break;
             Case 5:  $t = "Cinco";break;
             Case 6:  $t = "Seis";break;
             Case 7:  $t = "Siete";break;
             Case 8:  $t = "Ocho";break;
             Case 9:  $t = "Nueve";break;
             Case 10: $t = "Diez";break;
             Case 20: $t = "Veinte";break;
             Case 30: $t = "Treinta";break;
             Case 40: $t = "Cuarenta";break;
             Case 50: $t = "Cincuenta";break;
             Case 60: $t = "Sesenta";break;
             Case 70: $t = "Setenta";break;
             Case 80: $t = "Ochenta";break;
             Case 90: $t = "Noventa";break;
             Case 100: $t = "Cien";break;
             Case 200: $t = "Doscientos";break;
             Case 300: $t = "Trescientos";break;
             Case 400: $t = "Cuatrocientos";break;
             Case 500: $t = "Quinientos";break;
             Case 600: $t = "Seiscientos";break;
             Case 700: $t = "Setecientos";break;
             Case 800: $t = "Ochocientos";break;
             Case 900: $t = "Novecientos";break;
             Case 1000: $t = "Mil";break;
             Case 1000000: $t = "Millón";break;
          }

          If($t == $this->Void)
          {
            $i = $i + 1;
            $x = $x / 1000;
            If($x== 0) $i = 0;
          }
          else
             break;

        }while($i != 0);

        $Rtn = $t;
        Switch($i)
        {
           Case 0: $t = $this->Void;break;
           Case 1: $t = " Mil";break;
           Case 2: $t = " Millones";break;
           Case 3: $t = " Billones";break;
        }
        return($Rtn . $t);
    }
} 